from idlelib import history

from .getPublicData import *
from myApp.models import History
import json
from django.db.models import F

def addHistory(userInfo,jobId):
    '''

        filter的作用和where类似

        为什么要用user，而不用user_id?
            传的值是一个对象类型的话，我们就使用原始定义的字段名。如果是整型，就使用django给我们定义的字段名

    '''
    hisData = History.objects.filter(user=userInfo,job_id=jobId)

    # 查看hisData是否有数据
    if len(hisData):
        '''
            F('count') 是 Django ORM 中的一个特殊表达式，它允许你在数据库级别执行计算，而不是将值拉取到 Python 中。
        '''
        hisData[0].count = F('count') + 1   # 将记录中 count 字段的值加 1
        hisData[0].save()
    else:
        '''
            在数据库中创建一个新的 History 实例，且设置 user_id 和 job_id 字段为传入的 userInfo 和 jobId。
            此时新创建的记录的其他字段（如 count）会使用默认值，或者未设置字段会为 NULL 或空值。
        '''
        hisData = History.objects.create(user=userInfo, job_id=jobId)

def getHistoryData(userInfo):
    data = History.objects.filter(user=userInfo).order_by('-count')
    '''
        这里的item是history对象
    '''
    def map_fn(item):
        item.job.salary = json.loads(item.job.salary)
        item.job.companyPeople = json.loads(item.job.companyPeople)
        item.job.workTag = json.loads(item.job.workTag)
        if item.job.companyTags != '无':
            # 原本是 item.companyTags = json.loads(item.companyTags)[0].split(',')
            item.job.companyTags = json.loads(item.job.companyTags)
        if not item.job.practice:
            item.job.salary = list(map(lambda x: str(int(x / 1000)), item.job.salary))
        else:
            item.job.salary = list(map(lambda x: str(x), item.job.salary))
        item.job.salary = '-'.join(item.job.salary)
        item.job.companyPeople = list(map(lambda x: str(x), item.job.companyPeople))
        item.job.companyPeople = '-'.join(item.job.companyPeople)
        return item

    data = list(map(map_fn, data))
    return data

def removeHistory(hisId):
    his = History.objects.get(id=hisId)
    his.delete()